#include<stdio.h>
#include<string.h>  
#include<stdlib.h>

//37
// int add(int a,int b){
//     return a+b;
// }

//38
// void isEven(int a){
//     if(a%2==0){
//         printf("是偶数");
//     }
//     else{
//         printf("不是偶数");
//     }
// }

//40
// void max(int a,int b){
//     if(a>b){
//         printf("%d",a);
//     }
//     else{
//         printf("%d",b);
//     }
// }

//41
// int factorial(int n){
//     if(n==1) return 1;
//     return n*factorial(n-1);
// }

//42
// void multiply(int a,int b){
//     printf("%d",a*b);
// }

//43 
// int isPrime(int n){
//     if (n<=1) {
//         return 0;
//     }
//     for(int i=2;i*i<=n;i++){
//         if(n%i==0){
//             return 0;
//         }
//     }
//     return 1;
// }

//44
// void reverse(char* s){
//     if(s==NULL){
//         return;
//     }
//     int left,right;
//     left=0;
//     right=strlen(s)-1;
//     while(left<right){
//         int t=s[left];
//         s[left]=s[right];
//         s[right]=t;
//         left++;
//         right--;
//     }
// }

//45/
// void sumArray(int a[],int size){
//     int sum=0;
//     for(int i=0;i<size;i++){
//         sum+=a[i];
//     }
//     printf("%d",sum);
// }

//46
// void countDigits(int n){
//     int c=0;
//     int num=abs(n);
//     if(n==0){
//       printf("%d",c);
//     }
//     while(num>0){
//         num/=10;
//         c++;
//     }
//       printf("%d",c);
// }

//47
// void mergeArrays(int a[],int lena,int b[],int lenb)
// {
//     int c[100];
//     int lenc=lena+lenb;
//     int i=0,j=0,k=0;
//     while(i<lena && j<lenb){
//         if(a[i]<=b[j]){
//             c[k]=a[i];
//             i++;
//         }
//         else{
//             c[k]=b[j];
//             j++;
//         }
//         k++;
//     }
//     while(i<lena){
//             c[k]=a[i];
//             k++;
//             i++;
//         }
//          while(j<lenb){
//             c[k]=b[j];
//             k++;
//             j++;
//         }
//     for(int n=0;n<lenc;n++){
//         printf("%d ",c[n]);
//     }
// }

//48
void pbmynb(int a,int b){
    int n,my,nb;
    if(a<b){
        n=a;
    }
    else{
        n=b;
    }
    for(int i=n;i>0;i--){
        if(a%i==0 && b%i==0){
            my=i;
            break;
        }
    }
    nb=a*b/my;
    printf("%d %d",my,nb);

}
int main(){

//37    
    // int a,b;
    // scanf("%d%d",&a,&b);
    // printf("%d",add(a,b));

//38
    // int a;
    // scanf("%d",&a);
    // isEven(a);

//39
    // int a=0;
    // for(int i=0;i<5;i++){
    //     for(int j=0;j<5;j++){
    //         a++;
    //         if(a==11){
    //             goto over;
    //         }
    //     }
    // }
    // over:
    // printf("%d",a);

//40
    // int a,b;
    // scanf("%d%d",&a,&b);
    // max(a,b);

//41
    // int n;
    // scanf("%d",&n);
    // printf("%d",factorial(n));

//42
    // int a,b;
    // scanf("%d%d",&a,&b);
    // multiply(a,b);

//43    
    // int n,t;
    // scanf("%d",&n);
    // t=isPrime(n);
    // if(t==1){
    //     printf("是");
    // }
    // else{
    //     printf("不是");
    // }

//44
    // char c[100];
    // fgets(c,sizeof(c),stdin);
    // int len=strlen(c);
    // if(len>0 && c[len-1]=='\n'){
    //     c[len-1]='\0';
    // }
    // reverse(c);
    // printf("%s",c);

//45
    // int a[100],n;
    // scanf("%d",&n);
    // for(int i=0;i<n;i++){
    //     scanf("%d",&a[i]);
    // }
    // sumArray(a,n);

//46
    // int n;
    // scanf("%d",&n);
    // countDigits(n);

//47
    // int a[50],b[50];
    // int na,nb;
    // scanf("%d%d",&na,&nb);
    // for(int i=0;i<na;i++){
    //     scanf("%d",&a[i]);
    // }
    // for(int i=0;i<nb;i++){
    //     scanf("%d",&b[i]);
    // }
    // mergeArrays(a,na,b,nb);

//48
    int a,b;
    scanf("%d%d",&a,&b);
    pbmynb(a,b);

    return 0;
}